home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 708 / intuisup / intuisup42.lha / Intuisup / source.lha / Editor / edit2.c < prev    next >
C/C++ Source or Header  |  1992-03-21  |  17KB  |  614 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1991 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: edit2.c
  6.  *    Created ..: Sunday 22-Dec-91 21:22:22
  7.  *    Revision .: 1
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    31-Dec-91   Torsten Jürgeleit      new font management
  12.  *    22-Dec-91   Torsten Jürgeleit      Created this file!
  13.  *
  14.  ****************************************************************************
  15.  *
  16.  *    Edit ISUP objects - part 2
  17.  *
  18.  * $Revision Header ********************************************************/
  19.  
  20.     /* Includes */
  21.  
  22. #include "includes.h"
  23. #include "defines.h"
  24. #include "imports.h"
  25. #include "protos.h"
  26.  
  27.     /* Defines */
  28.  
  29. #define EDIT_MODE_NORMAL    1
  30. #define EDIT_MODE_SPECIAL    2
  31.  
  32.     /* Defines */
  33.  
  34. #define EDIT_TITLE_LEFT_EDGE    0
  35. #define EDIT_TITLE_TOP_EDGE    5
  36. #define EDIT_TITLE_TYPE        TEXT_DATA_TYPE_TEXT
  37. #define EDIT_TITLE_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
  38. #define EDIT_TITLE_TEXT_ATTR    &topaz80_attr
  39.  
  40. #define TEXT_TYPE_GADGET_FLAG_MASK    (GADGET_DATA_FLAG_STRING_UNSIGNED_DEC | GADGET_DATA_FLAG_STRING_SIGNED_DEC | GADGET_DATA_FLAG_STRING_HEX | GADGET_DATA_FLAG_STRING_BIN)
  41.  
  42.     /* Edit template data */
  43.  
  44.    SHORT
  45. edit_template_data_action(struct Template  *old_tp, APTR normal_gl,
  46.                APTR special_gl1, APTR special_gl2, APTR edit_gl)
  47. {
  48.    struct TemplateList  *tl = &template_list;
  49.    struct Template      *new_tp;
  50.    SHORT status = EDITOR_STATUS_NORMAL;
  51.  
  52.    /* Make clone of selected template and remove it from template list */
  53.    if (!(new_tp = clone_template(tl, old_tp, TRUE))) {
  54.       status = EDITOR_ERROR_OUT_OF_MEM;
  55.    } else {
  56.       struct Template  *pred_tp;
  57.       struct MsgPort   *up = ewin->UserPort;
  58.       USHORT mode = EDIT_MODE_NORMAL, new_mode = EDIT_MODE_NORMAL;
  59.       BOOL   exit = FALSE;
  60.  
  61.       /* Save previous template for Insert() and remove old template from list */
  62.       pred_tp = get_pred(&old_tp->tp_Node);
  63.       Remove(&old_tp->tp_Node);
  64.  
  65.       /* Outer loop */
  66.       do {
  67.      BYTE title[80];
  68.      BOOL keepon = TRUE;
  69.  
  70.      /* Init title text */
  71.      switch (TEMPLATE_GROUP(old_tp)) {
  72.         case TEMPLATE_GROUP_BORDER :
  73.            strcpy(&title[0], "Edit Border Data");
  74.            break;
  75.  
  76.         case TEMPLATE_GROUP_TEXT :
  77.            strcpy(&title[0], "Edit Text Data");
  78.            break;
  79.  
  80.         case TEMPLATE_GROUP_GADGET :
  81.            if (mode == EDIT_MODE_NORMAL) {
  82.           SPrintf(&title[0], "Edit normal %s Gadget Data",
  83.                  template_type_text_array[old_tp->tp_Type]);
  84.            } else {
  85.           SPrintf(&title[0], "Edit special %s Gadget Data",
  86.                  template_type_text_array[old_tp->tp_Type]);
  87.            }
  88.            break;
  89.      }
  90.  
  91.      /* Init edit display */
  92.      IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH,
  93.                            EDITOR_WINDOW_HEIGHT, 0);
  94.      IPrintText(eri, ewin, &title[0], EDIT_TITLE_LEFT_EDGE,
  95.              EDIT_TITLE_TOP_EDGE, EDIT_TITLE_TYPE, EDIT_TITLE_FLAGS,
  96.                               EDIT_TITLE_TEXT_ATTR);
  97.      if (mode == EDIT_MODE_NORMAL) {
  98.         IDisplayGadgets(ewin, normal_gl);
  99.      } else {
  100.         if (special_gl1) {
  101.            ISetGadgetAttributes(special_gl1, 0, 0L, 0L,
  102.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  103.                               &new_tp->tp_TextList);
  104.            change_text_list_editor_mode(special_gl1, DEFAULT_LIST_MODE);
  105.            IDisplayGadgets(ewin, special_gl1);
  106.         }
  107.         if (special_gl2) {
  108.            IDisplayGadgets(ewin, special_gl2);
  109.         }
  110.      }
  111.      IDisplayGadgets(ewin, edit_gl);
  112.  
  113.      /* Inner loop */
  114.      do {
  115.         struct IntuiMessage  *msg;
  116.  
  117.         WaitPort(up);
  118.         while (msg = IGetMsg(up)) {
  119.            APTR   gl;
  120.            USHORT entry;
  121.            ULONG  value;
  122.  
  123.            switch (msg->Class) {
  124.           case CLOSEWINDOW :
  125.              status = EDITOR_STATUS_QUIT;
  126.              keepon = FALSE;
  127.              exit   = TRUE;
  128.              break;
  129.  
  130.           case ISUP_ID :
  131.              gl    = (APTR)msg->SpecialLink;
  132.              entry = msg->Code;
  133.              value = (ULONG)msg->IAddress;
  134.              if (gl == edit_gl) {
  135.             struct Template  *swap_tp;
  136.  
  137.             /* Perform edit gadget action */
  138.             switch (entry) {
  139.                case EDIT_GADGET_OK :
  140.                   exit = TRUE;
  141.                   break;
  142.  
  143.                case EDIT_GADGET_DEFAULT :
  144.                   free_template_data(tl, new_tp);
  145.                   if ((status = init_default_template_data(tl,
  146.                    new_tp, TRUE)) != EDITOR_STATUS_NORMAL) {
  147.                  swap_tp = old_tp;
  148.                  old_tp  = new_tp;
  149.                  new_tp  = swap_tp;
  150.                   } else {
  151.                  tl->tl_Flags |= TEMPLATE_LIST_FLAG_CHANGED;
  152.                   }
  153.                   exit = TRUE;
  154.                   break;
  155.  
  156.                case EDIT_GADGET_SWITCH :
  157.                   if (mode == EDIT_MODE_NORMAL) {
  158.                  new_mode = EDIT_MODE_SPECIAL;
  159.                   } else {
  160.                  new_mode = EDIT_MODE_NORMAL;
  161.                   }
  162.                   break;
  163.  
  164.                case EDIT_GADGET_CANCEL :
  165.                   swap_tp = old_tp;
  166.                   old_tp  = new_tp;
  167.                   new_tp  = swap_tp;
  168.                   exit    = TRUE;
  169.                   break;
  170.             }
  171.             keepon = FALSE;
  172.              } else {
  173.  
  174.             /* Perform data gadget action */
  175.             if (mode == EDIT_MODE_NORMAL) {
  176.                if ((status = change_normal_template_data(normal_gl,
  177.                            new_tp, entry, value)) !=
  178.                              EDITOR_STATUS_NORMAL) {
  179.                   keepon = FALSE;
  180.                   exit   = TRUE;
  181.                }
  182.             } else {
  183.                if (gl = special_gl1) {
  184.                   status = perform_text_list_editor_action(special_gl1,
  185.                               new_tp, entry, value);
  186.                } else {
  187.                   status = change_special_template_data(special_gl2,
  188.                               new_tp, entry, value);
  189.  
  190.                }
  191.                if (status != EDITOR_STATUS_NORMAL) {
  192.                   keepon = FALSE;
  193.                   exit   = TRUE;
  194.                }
  195.             }
  196.             tl->tl_Flags |= TEMPLATE_LIST_FLAG_CHANGED;
  197.              }
  198.              break;
  199.            }
  200.            IReplyMsg(msg);
  201.         }
  202.      } while (keepon == TRUE);
  203.  
  204.      IRemoveGadgets(edit_gl);
  205.      if (mode == EDIT_MODE_NORMAL) {
  206.         IRemoveGadgets(normal_gl);
  207.      } else {
  208.         if (special_gl1) {
  209.            IRemoveGadgets(special_gl1);
  210.         }
  211.         if (special_gl2) {
  212.            IRemoveGadgets(special_gl2);
  213.         }
  214.      }
  215.      if (new_mode != mode) {
  216.         mode = new_mode;
  217.      }
  218.       } while (exit == FALSE);
  219.  
  220.       /* Insert new template in list and free old one */
  221.       Insert((struct List *)&tl->tl_Templates, &new_tp->tp_Node,
  222.                              &pred_tp->tp_Node);
  223.       ISetGadgetAttributes(egl, EDITOR_GADGET_TEMPLATES, 0L, 0L,
  224.            USE_CURRENT_VALUE, USE_CURRENT_VALUE, &tl->tl_Templates);
  225.       free_template(tl, old_tp);
  226.       refresh_all_templates();
  227.    }
  228.    return(status);
  229. }
  230.     /* Change normal template data */
  231.  
  232.    SHORT
  233. change_normal_template_data(APTR gl, struct Template  *tp, USHORT entry,
  234.                                 ULONG value)
  235. {
  236.    struct TemplateList  *tl = &template_list;
  237.    struct Box           *box = &tp->tp_Box;
  238.    struct BorderData    *bd;
  239.    struct TextData      *td;
  240.    struct GadgetData    *gd;
  241.    struct TextAttr      *ta;
  242.    BYTE   *old_text, buffer[40];
  243.    USHORT old_type, old_pos;
  244.    UWORD  old_size;
  245.    ULONG  flags;
  246.    SHORT  status = EDITOR_STATUS_NORMAL;
  247.  
  248.    switch (TEMPLATE_GROUP(tp)) {
  249.       case TEMPLATE_GROUP_BORDER :
  250.      bd = &tp->tp_Data.tp_BorderData;
  251.      switch (entry) {
  252.         case BORDER_GADGET_NAME :
  253.            strcpy(&tp->tp_TemplateName[0], (BYTE *)value);
  254.            tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
  255.            break;
  256.  
  257.         case BORDER_GADGET_TYPE :
  258.            bd->bd_Type = value + 1;
  259.            break;
  260.      }
  261.      break;
  262.  
  263.       case TEMPLATE_GROUP_TEXT :
  264.      gd = &text_gadget_data[TEXT_GADGET_TEXT];
  265.      td = &tp->tp_Data.tp_TextData;
  266.      switch (entry) {
  267.         case TEXT_GADGET_NAME :
  268.            strcpy(&tp->tp_TemplateName[0], (BYTE *)value);
  269.            tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
  270.            break;
  271.  
  272.         case TEXT_GADGET_TEXT :
  273.            if (td->td_Type == TEXT_DATA_TYPE_TEXT) {
  274.           old_text = td->td_Text;
  275.           if ((status = duplicate_string((BYTE *)value,
  276.                    &td->td_Text)) != EDITOR_STATUS_NORMAL) {
  277.              td->td_Text = old_text;
  278.           } else {
  279.              DosFreeMem(old_text);
  280.           }
  281.            } else {
  282.           td->td_Text = (BYTE *)Atol((BYTE *)value);
  283.            }
  284.            ISetGadgetAttributes(gl, TEXT_GADGET_TEXT, 0L, 0L,
  285.              USE_CURRENT_VALUE, USE_CURRENT_VALUE, td->td_Text);
  286.            break;
  287.  
  288.         case TEXT_GADGET_FONT :
  289.            old_text = (BYTE *)td->td_TextAttr->ta_Name;
  290.            if (!(ta = open_template_font_by_attributes(tl,
  291.                    (BYTE *)value, td->td_TextAttr->ta_YSize))) {
  292.           DisplayBeep(NULL);
  293.           ISetGadgetAttributes(gl, TEXT_GADGET_FONT, 0L, 0L,
  294.                 USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
  295.            } else {
  296.           if (ta->ta_YSize != td->td_TextAttr->ta_YSize) {
  297.              ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  298.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  299.                               (VOID *)ta->ta_YSize);
  300.           }
  301.           close_template_font(tl, td->td_TextAttr);
  302.           td->td_TextAttr = ta;
  303.            }
  304.            break;
  305.  
  306.         case TEXT_GADGET_SIZE :
  307.            old_size = td->td_TextAttr->ta_YSize;
  308.            if (!(ta = open_template_font_by_attributes(tl,
  309.             (BYTE *)td->td_TextAttr->ta_Name, (USHORT)value))) {
  310.           DisplayBeep(NULL);
  311.           ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  312.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  313.                               (VOID *)old_size);
  314.            } else {
  315.           if (ta->ta_YSize != value) {
  316.              ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  317.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  318.                               (VOID *)ta->ta_YSize);
  319.           }
  320.           close_template_font(tl, td->td_TextAttr);
  321.           td->td_TextAttr = ta;
  322.            }
  323.            break;
  324.  
  325.         case TEXT_GADGET_TYPE :
  326.            old_type    = td->td_Type;
  327.            old_text    = td->td_Text;
  328.            flags       = gd->gd_Flags & ~TEXT_TYPE_GADGET_FLAG_MASK;
  329.            td->td_Type = value + 1;
  330.            if (td->td_Type == TEXT_DATA_TYPE_TEXT) {
  331.           IConvertUnsignedDec((ULONG)old_text, &buffer[0], 0);
  332.           if ((status = duplicate_string((BYTE *)&buffer[0],
  333.                    &td->td_Text)) != EDITOR_STATUS_NORMAL) {
  334.              td->td_Type = old_type;
  335.              td->td_Text = old_text;
  336.           }
  337.            } else {
  338.           switch (td->td_Type) {
  339.              case TEXT_DATA_TYPE_NUM_UNSIGNED_DEC :
  340.             flags |= GADGET_DATA_FLAG_STRING_UNSIGNED_DEC;
  341.             break;
  342.  
  343.              case TEXT_DATA_TYPE_NUM_SIGNED_DEC :
  344.             flags |= GADGET_DATA_FLAG_STRING_SIGNED_DEC;
  345.             break;
  346.  
  347.              case TEXT_DATA_TYPE_NUM_HEX :
  348.             flags |= GADGET_DATA_FLAG_STRING_HEX;
  349.             break;
  350.  
  351.              case TEXT_DATA_TYPE_NUM_BIN :
  352.             flags |= GADGET_DATA_FLAG_STRING_BIN;
  353.             break;
  354.           }
  355.           if (old_type == TEXT_DATA_TYPE_TEXT) {
  356.              td->td_Text = (BYTE *)Atol(old_text);
  357.              DosFreeMem(old_text);
  358.           }
  359.            }
  360.            ISetGadgetAttributes(gl, TEXT_GADGET_TEXT,
  361.                TEXT_TYPE_GADGET_FLAG_MASK, flags, USE_CURRENT_VALUE,
  362.                         USE_CURRENT_VALUE, td->td_Text);
  363.            break;
  364.  
  365.         case TEXT_GADGET_BOLD :
  366.            if (value) {
  367.           td->td_Flags |= TEXT_DATA_FLAG_BOLD;
  368.            } else {
  369.           td->td_Flags &= ~TEXT_DATA_FLAG_BOLD;
  370.            }
  371.            break;
  372.  
  373.         case TEXT_GADGET_ITALIC :
  374.            if (value) {
  375.           td->td_Flags |= TEXT_DATA_FLAG_ITALIC;
  376.            } else {
  377.           td->td_Flags &= ~TEXT_DATA_FLAG_ITALIC;
  378.            }
  379.            break;
  380.  
  381.         case TEXT_GADGET_UNDERLINED :
  382.            if (value) {
  383.           td->td_Flags |= TEXT_DATA_FLAG_UNDERLINED;
  384.            } else {
  385.           td->td_Flags &= ~TEXT_DATA_FLAG_UNDERLINED;
  386.            }
  387.            break;
  388.  
  389.         case TEXT_GADGET_COLOR2 :
  390.            if (value) {
  391.           td->td_Flags |= TEXT_DATA_FLAG_COLOR2;
  392.            } else {
  393.           td->td_Flags &= ~TEXT_DATA_FLAG_COLOR2;
  394.            }
  395.            break;
  396.  
  397.         case TEXT_GADGET_COMPLEMENT :
  398.            if (value) {
  399.           td->td_Flags |= TEXT_DATA_FLAG_COMPLEMENT;
  400.            } else {
  401.           td->td_Flags &= ~TEXT_DATA_FLAG_COMPLEMENT;
  402.            }
  403.            break;
  404.      }
  405.  
  406.      /* Calc size of new text for template box */
  407.      box->bo_X2 = box->bo_X1 + IPrintText(pri, pwin, td->td_Text,
  408.                    td->td_LeftEdge, td->td_TopEdge, td->td_Type,
  409.                   TEXT_DATA_FLAG_NO_PRINT, td->td_TextAttr) - 1;
  410.      box->bo_Y2 = box->bo_Y1 + td->td_TextAttr->ta_YSize - 1;
  411.      break;
  412.  
  413.       case TEMPLATE_GROUP_GADGET :
  414.      gd = &tp->tp_Data.tp_GadgetData;
  415.      switch (entry) {
  416.         case NORMAL_GADGET_NAME :
  417.            strcpy(&tp->tp_TemplateName[0], (BYTE *)value);
  418.            tp->tp_Flags &= ~TEMPLATE_FLAG_DEFAULT_NAME;
  419.            break;
  420.  
  421.         case NORMAL_GADGET_TEXT :
  422.            old_text = gd->gd_Text;
  423.            if ((status = duplicate_string((BYTE *)value,
  424.                    &gd->gd_Text)) != EDITOR_STATUS_NORMAL) {
  425.           DisplayBeep(NULL);
  426.           gd->gd_Text = old_text;
  427.           ISetGadgetAttributes(gl, NORMAL_GADGET_TEXT, 0L, 0L,
  428.                 USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
  429.            } else {
  430.           DosFreeMem(old_text);
  431.            }
  432.            break;
  433.  
  434.         case NORMAL_GADGET_FONT :
  435.            old_text = (BYTE *)gd->gd_TextAttr->ta_Name;
  436.            if (!(ta = open_template_font_by_attributes(tl,
  437.                    (BYTE *)value, gd->gd_TextAttr->ta_YSize))) {
  438.           DisplayBeep(NULL);
  439.           ISetGadgetAttributes(gl, TEXT_GADGET_FONT, 0L, 0L,
  440.                 USE_CURRENT_VALUE, USE_CURRENT_VALUE, old_text);
  441.            } else {
  442.           if (ta->ta_YSize != gd->gd_TextAttr->ta_YSize) {
  443.              ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  444.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  445.                               (VOID *)ta->ta_YSize);
  446.           }
  447.           close_template_font(tl, gd->gd_TextAttr);
  448.           gd->gd_TextAttr = ta;
  449.            }
  450.            break;
  451.  
  452.         case NORMAL_GADGET_SIZE :
  453.            old_size = gd->gd_TextAttr->ta_YSize;
  454.            if (!(ta = open_template_font_by_attributes(tl,
  455.             (BYTE *)gd->gd_TextAttr->ta_Name, (USHORT)value))) {
  456.           DisplayBeep(NULL);
  457.           ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  458.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  459.                               (VOID *)old_size);
  460.            } else {
  461.           if (ta->ta_YSize != value) {
  462.              ISetGadgetAttributes(gl, TEXT_GADGET_SIZE, 0L, 0L,
  463.                        USE_CURRENT_VALUE, USE_CURRENT_VALUE,
  464.                               (VOID *)ta->ta_YSize);
  465.           }
  466.           close_template_font(tl, gd->gd_TextAttr);
  467.           gd->gd_TextAttr = ta;
  468.            }
  469.            break;
  470.  
  471.         case NORMAL_GADGET_POS :
  472.            switch (GADGET_TEXT_POS_MASK(gd->gd_Flags)) {
  473.           case GADGET_DATA_FLAG_TEXT_LEFT :
  474.              old_pos = TEXT_POS_LEFT;
  475.              break;
  476.  
  477.           case GADGET_DATA_FLAG_TEXT_RIGHT :
  478.              old_pos = TEXT_POS_RIGHT;
  479.              break;
  480.  
  481.           case GADGET_DATA_FLAG_TEXT_ABOVE :
  482.              old_pos = TEXT_POS_ABOVE;
  483.              break;
  484.  
  485.           case GADGET_DATA_FLAG_TEXT_BELOW :
  486.              old_pos = TEXT_POS_BELOW;
  487.              break;
  488.  
  489.           default :
  490.              old_pos = TEXT_POS_INSIDE;
  491.              break;
  492.            }
  493.  
  494.            /* Check if text position possible for selected gadget type */
  495.            switch (gd->gd_Type) {
  496.           case GADGET_DATA_TYPE_MX :
  497.              if (value != TEXT_POS_LEFT && value != TEXT_POS_RIGHT) {
  498.             if (old_pos == TEXT_POS_RIGHT) {
  499.                value = TEXT_POS_LEFT;
  500.             } else {
  501.                value = TEXT_POS_RIGHT;
  502.             }
  503.              }
  504.              break;
  505.  
  506.           case GADGET_DATA_TYPE_CHECK :
  507.           case GADGET_DATA_TYPE_STRING :
  508.           case GADGET_DATA_TYPE_INTEGER :
  509.           case GADGET_DATA_TYPE_SLIDER :
  510.           case GADGET_DATA_TYPE_SCROLLER :
  511.           case GADGET_DATA_TYPE_CYCLE :
  512.           case GADGET_DATA_TYPE_COUNT :
  513.              if (value == TEXT_POS_INSIDE) {
  514.             if (old_pos == TEXT_POS_BELOW) {
  515.                value = TEXT_POS_LEFT;
  516.             } else {
  517.                value = TEXT_POS_BELOW;
  518.             }
  519.              }
  520.              break;
  521.  
  522.           case GADGET_DATA_TYPE_LISTVIEW :
  523.           case GADGET_DATA_TYPE_PALETTE :
  524.              if (value != TEXT_POS_ABOVE) {
  525.             value = TEXT_POS_ABOVE;
  526.              }
  527.              break;
  528.  
  529.           default :
  530.              break;
  531.            }
  532.            ISetGadgetAttributes(gl, NORMAL_GADGET_POS, 0L, 0L,
  533.                USE_CURRENT_VALUE, value, (VOID *)USE_CURRENT_VALUE);
  534.           gd->gd_Flags &= ~(GADGET_DATA_FLAG_TEXT_LEFT |
  535.                            GADGET_DATA_FLAG_TEXT_RIGHT |
  536.                            GADGET_DATA_FLAG_TEXT_ABOVE |
  537.                            GADGET_DATA_FLAG_TEXT_BELOW);
  538.            switch (value) {
  539.           case TEXT_POS_LEFT :
  540.              gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_LEFT;
  541.              break;
  542.  
  543.           case TEXT_POS_RIGHT :
  544.              gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_RIGHT;
  545.              break;
  546.  
  547.           case TEXT_POS_ABOVE :
  548.              gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_ABOVE;
  549.              break;
  550.  
  551.           case TEXT_POS_BELOW :
  552.              gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_BELOW;
  553.              break;
  554.  
  555.           case TEXT_POS_INSIDE :
  556.              break;
  557.            }
  558.            break;
  559.  
  560.         case NORMAL_GADGET_DISABLED :
  561.            if (value) {
  562.           gd->gd_Flags |= GADGET_DATA_FLAG_DISABLED;
  563.            } else {
  564.           gd->gd_Flags &= ~GADGET_DATA_FLAG_DISABLED;
  565.            }
  566.            break;
  567.  
  568.         case NORMAL_GADGET_NO_BORDER :
  569.            if (value) {
  570.           gd->gd_Flags |= GADGET_DATA_FLAG_NO_BORDER;
  571.            } else {
  572.           gd->gd_Flags &= ~GADGET_DATA_FLAG_NO_BORDER;
  573.            }
  574.            break;
  575.  
  576.         case NORMAL_GADGET_HIGHCOMP :
  577.            if (value) {
  578.           gd->gd_Flags |= GADGET_DATA_FLAG_HIGH_COMP;
  579.            } else {
  580.           gd->gd_Flags &= ~GADGET_DATA_FLAG_HIGH_COMP;
  581.            }
  582.            break;
  583.  
  584.         case NORMAL_GADGET_HOTKEY :
  585.            if (value) {
  586.           gd->gd_Flags |= GADGET_DATA_FLAG_HOTKEY;
  587.            } else {
  588.           gd->gd_Flags &= ~GADGET_DATA_FLAG_HOTKEY;
  589.            }
  590.            break;
  591.  
  592.         case NORMAL_GADGET_COLOR2 :
  593.            if (value) {
  594.           gd->gd_Flags |= GADGET_DATA_FLAG_TEXT_COLOR2;
  595.            } else {
  596.           gd->gd_Flags &= ~GADGET_DATA_FLAG_TEXT_COLOR2;
  597.            }
  598.            break;
  599.      }
  600.      break;
  601.    }
  602.    return(status);
  603. }
  604.     /* Change special template data */
  605.  
  606.    SHORT
  607. change_special_template_data(APTR gl, struct Template  *tp, USHORT entry,
  608.                                 ULONG value)
  609. {
  610.    SHORT status = EDITOR_STATUS_NORMAL;
  611.  
  612.    return(status);
  613. }
  614.